//
//  CZStatus.swift
//  GZWeibo007
//
//  Created by Apple on 15/12/20.
//  Copyright © 2015年 Apple. All rights reserved.
//

import UIKit

// -[__NSCFNumber length]: unrecognized selector sent to instance 0xb0def2ca965ddb43, 看看是不是模型的属性类型出现错误

class CZStatus: NSObject {
    /// 1.定义模型属性
    
    // MARK: - 属性
    /// 创建时间
    var created_at: String?
    
    /// 微博id
    var id: Int64 = 0
    
    /// 微博正文内容
    var text: String?
    
    /// 来源
    var source: String?
    
    /// 微博的配图 [String: AnyObject]
    var pic_urls: [[String: AnyObject]]? // 数组,里面的元素是字典
    
    /// 转发数
    var reposts_count: Int = 0
    
    /// 评论数
    var comments_count: Int = 0
    
    /// 表态数(赞)
    var attitudes_count: Int = 0
    
    // 2.字典转模型
    init(dict: [String: AnyObject]) {
        // 在init之前能赋值,就可以不加?
        super.init()
        
        // 使用KVC来赋值所有属性, KVC是一个方法,方法是只有对象初始化完毕之后才能调用
        setValuesForKeysWithDictionary(dict)
    }
    
    // 3.字典的key在模型中找不到对应的属性,需要实现 forUndefinedKey
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
    
    // 4.实现description属性
    override var description: String {
        let prop = ["created_at", "id", "text", "source", "pic_urls", "reposts_count", "comments_count", "attitudes_count"]
        
        // 通过一个数组来生成一个字典,数组中的元素,会成为字典的key,key所对应的value，会从模型中来找对应的属性值
        let dict = dictionaryWithValuesForKeys(prop)
        
        // \n 换行, \t table键
        return "\n\t微博模型: \(dict)"
    }
    
    // MARK: - 加载微博数据
    class func mLoadStatus(finished: (statuses: [CZStatus]?, error: NSError?) -> ()) {
        // 直接调用网络工具类的方法来加载微博数据
        CZNetworkTool.sharedInstance.loadStatus { (result, error) -> () in
            // 1.判断是否有数据
            if error != nil || result == nil {
                // 没有加载到数据
                // 调用闭包
                finished(statuses: nil, error: error)
                return
            }
            
            // 没有错误,有数据
            // 字典转模型,判断字典是否有statuses,将statuses的值转成数组,数组里面存放的是字典
            if let array = result?["statuses"] as? [[String: AnyObject]] {
                // 能获取到微博数据
                
                // 创建一个数组,来存放转好的模型
                var statuses = [CZStatus]()
                
                // 遍历数组
                // [String: AnyObject] == Dictionary<String, AnyObject>
                for dcit in array {
                    // 获取到字典,字典转模型
                    let status = CZStatus(dict: dcit)
                    statuses.append(status)
                }
                
                // 所有的模型都转换完成,告诉调用的人有微博模型数据了
                finished(statuses: statuses, error: nil)
            } else {
                finished(statuses: nil, error: nil)
            }
        }
    }
}
